581D - Three Logos - CodeForces Solution


bitmasks brute force constructive algorithms geometry implementation math *1700

Please click on ads to support us..

Python Code:

x1, y1, x2, y2, x3, y3=[int(k) for k in input().split()]
iota=[((x1, y1), "A"), ((x2, y2), "B"), ((x3, y3), "C")]
for j in range(3):
    iota[j]=tuple([tuple(sorted(list(iota[j][0]))), iota[j][1]])
iota.sort(key=lambda x: max(x[0]))
rho=[iota[j][1] for j in range(3)]
iota=[iota[j][0] for j in range(3)]
y=iota.pop()
c, d=y[1], y[0]
if iota[1][1]==c:
    if iota[0][1]==c:
        if iota[0][0]+iota[1][0]==c-d:
            print(c)
            for j in range(d):
                print(rho[2]*c)
            for j in range(iota[0][0]):
                print(rho[0]*c)
            for j in range(iota[1][0]):
                print(rho[1]*c)
        else:
            print(-1)
    else:
        print(-1)
else:
    d=c-d
    if (d not in iota[0]) or (d not in iota[1]):
        print(-1)
    else:
        if iota[0][0]==d:
            iota[0]=(iota[0][1], iota[0][0])
        if iota[1][0]==d:
            iota[1]=(iota[1][1], iota[1][0])
        if iota[0][0]+iota[1][0]!=c:
            print(-1)
        else:
            print(c)
            for j in range(c-d):
                print(rho[2]*c)
            for j in range(d):
                print(rho[0]*iota[0][0]+rho[1]*iota[1][0])

C++ Code:

#include <bits/stdc++.h>
#include <algorithm>

using namespace std;

namespace IO{
    void setIn(string s) {freopen(s.c_str(), "r", stdin);}
    void setOut(string s) {freopen(s.c_str(), "w", stdout);}
    void setIO(string s = ""){
        ios_base::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
        #ifndef ONLINE_JUDGE
        #endif // ONLINE_JUDGE
        if (s.size()){
            setIn(s+".inp");
            setOut(s+".out");
        } else{
            #ifndef ONLINE_JUDGE
                freopen("input.txt", "r", stdin);
            #endif // ONLINE_JUDGE
        }
    }
}

using namespace IO;

namespace Function{
    template <typename T1, typename T2> bool amax(T1 &a, T2 b){
        if (a < b) {
            a = b;
            return 1;
        }
        return 0;
    }
    template <typename T1, typename T2> bool amin(T1 &a, T2 b){
        if (a > b){
            a = b;
            return 1;
        }
        return 0;
    }
    template <typename T> void compress(T &a){
        sort(a.begin(), a.end());
        a.resize(unique(a.begin(), a.end()) - a.begin());
    }
    template <typename T1, typename T2, typename T3> int position(T1 Begin, T2 End, T3 val, bool type = 0){
        if (type == 0){
            return lower_bound(Begin, End, val) - Begin;
        }
        return upper_bound(Begin, End, val) - Begin;
    }

    template <typename T> long long sqr(T x) {return 1LL * x * x;}

    template <typename T1, typename T2> long long pow_mod(T1 a, T2 b, long long mod = 1){ //a ^ b % mod
        if(b == 0){return 1 % mod;}
        else{
            if(b % 2 == 0){
                return sqr(pow_mod(a, b / 2, mod)) % mod;
            }else{
                return a * (sqr(pow_mod(a, b / 2, mod)) % mod) % mod;
            }
        }
    }

    template <typename T1, typename T2> long long GCD(T1 a, T2 b) {return b == 0 ? a : GCD(b, a % b);}
    template <typename T1, typename T2> long long LCM(T1 a, T2 b) {return 1LL * a / GCD(a, b) * b;}
}

using namespace Function;

namespace Output{
    char End_Of_Stream = '\n';
    void print(int x) {cout << x << End_Of_Stream;}
    void print(unsigned int x) {cout << x << End_Of_Stream;}
    void print(long unsigned int x) {cout << x << End_Of_Stream;}
    void print(long long x) {cout << x << End_Of_Stream;}
    void print(unsigned long long x) {cout << x << End_Of_Stream;}
    void print(float x) {cout << x << End_Of_Stream;}
    void print(double x) {cout << x << End_Of_Stream;}
    void print(long double x) {cout << x << End_Of_Stream;}
    void print(char x) {cout << x << End_Of_Stream;}
    void print(const char* x) {cout << x << End_Of_Stream;}
    void print(string x) {cout << x << End_Of_Stream;}
    void print(bool x) {cout << x << End_Of_Stream;}

    template <typename T1, typename T2> void print(pair <T1, T2> a) {cout << a.first << " " << a.second << End_Of_Stream;}
    template <size_t sz> void print(bitset<sz> a) {
        for(int i = 0; i < sz; i++){
            cout << a[i];
        }
        cout << End_Of_Stream;
    }

    template <typename T> void write(T x) {print(x);}

    template <class T, class... Ts> void write(T t, Ts... ts){
        write(t);
        write(ts...);
    }

    template <class T, class... Ts> void print(T t, Ts... ts){
        End_Of_Stream = ' ';
        write(t, ts...);
        cout << '\n';
        End_Of_Stream = '\n';
    }

    template <typename T> void print(T a){
        for(auto it : a){
            cout << it << " ";
        }
        cout << "\n";
    }

    template <typename T> void prints(T a){
        for(auto it : a){
            print(it);
        }
    }

    template <class T, class... Ts> void prine(T t, Ts... ts){
        print(t, ts...);
        exit(0);
    }
}

using namespace Output;

typedef pair <int, int> pii;
typedef long long ll;
#define fi first
#define se second


const int dx[] = {1, -1, 0, 0};
const int dy[] = {0, 0, 1, -1};
const int dx1[] = {1, -1, 0, 0, -1, 1, -1, 1};
const int dy1[] = {0, 0, 1, -1, -1, -1, 1, 1};
const int INF = 1e9 + 10;
const long long INFL = 1e18 + 1e15;
const long long MOD = 1e9 + 7;
const long long MOD1 = (119 << 23) + 1;
const int N = 2e5 + 5;

int x[3];
int y[3];
char c[3] = {'A', 'B', 'C'};

int main(){
    //  setIO();
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    for(int i = 0; i < 3; i++){
        cin >> x[i] >> y[i];
    }
    if(max(x[1], y[1]) > max(x[0], y[0])){
        swap(x[1], x[0]);
        swap(y[1], y[0]);
        swap(c[1], c[0]);
    }
    if(max(x[2], y[2]) > max(x[0], y[0])){
        swap(x[2], x[0]);
        swap(y[2], y[0]);
        swap(c[2], c[0]);
    }
    for(int mask = 0; mask < 8; mask++){
        int x_temp[3];
        int y_temp[3];
        for(int bit = 0; bit < 3; bit++){
            x_temp[bit] = x[bit];
            y_temp[bit] = y[bit];
            if(mask & (1 << bit)){
                swap(x_temp[bit], y_temp[bit]);
            }
        }

//        print(mask, x_temp[0], y_temp[0], x_temp[1], y_temp[1], x_temp[2], y_temp[2]);

        if(y_temp[1] == y_temp[2] && y_temp[1] == y_temp[0] && x_temp[0] + x_temp[1] + x_temp[2] == y_temp[0]){
            print(y_temp[0]);
            for(int k = 0; k < 3; k++){
                for(int i = 0; i < x_temp[k]; i++){
                    for(int j = 0; j < y_temp[k]; j++){
                        cout << c[k];
                    }
                    cout << "\n";
                }
            }
            return 0;
        }else if(x_temp[1] == x_temp[2] && y_temp[1] + y_temp[2] == y_temp[0] && x_temp[1] + x_temp[0] == y_temp[0]){
            print(y_temp[0]);
            
            for(int k = 0; k < 1; k++){
                for(int i = 0; i < x_temp[k]; i++){
                    for(int j = 0; j < y_temp[k]; j++){
                        cout << c[k];
                    }
                    cout << "\n";
                }
            }
            for(int i = 0; i < x_temp[1]; i++){
                for(int j = 0; j < y_temp[0]; j++){
                    if(j < y_temp[1]){
                        cout << c[1];
                    }else{
                        cout << c[2];
                    }
                }
                cout << "\n";
            }
            return 0;
        }
    }

    prine(-1);



    return 0;
}


Comments

Submit
0 Comments
More Questions

734A - Anton and Danik
1300B - Assigning to Classes
1647A - Madoka and Math Dad
710A - King Moves
1131A - Sea Battle
118A - String Task
236A - Boy or Girl
271A - Beautiful Year
520B - Two Buttons
231A - Team
479C - Exams
1030A - In Search of an Easy Problem
158A - Next Round
71A - Way Too Long Words
160A - Twins
1A - Theatre Square
1614B - Divan and a New Project
791A - Bear and Big Brother
1452A - Robot Program
344A - Magnets
96A - Football
702B - Powers of Two
1036A - Function Height
443A - Anton and Letters
1478B - Nezzar and Lucky Number
228A - Is your horseshoe on the other hoof
122A - Lucky Division
1611C - Polycarp Recovers the Permutation
432A - Choosing Teams
758A - Holiday Of Equality